﻿using AVIS.OutBound.RateCodes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AVIS.OutBound.CarGroups.Dto
{
    /// <summary>
    /// 车型组的列表信息（包含多个CarGroupsDto）
    /// </summary>
    public class CarGroupsListOutput
    {
        /// <summary>
        /// 订单Id
        /// </summary>
        public string OrderId { get; set; }

        /// <summary>
        /// 车组汇总数据的列表（美国车组一般有四个套餐：基础套餐、全险套餐、超级全险套餐、一价全包）
        /// </summary>
        public List<CarGroupsDto> CarGroupsList { get; set; }

        /// <summary>
        /// 添加车组信息
        /// </summary>
        /// <param name="carGroup">车组</param>
        /// <param name="rateCode">套餐</param>
        public void AddCarGroup(CarGroup carGroup, RateCode rateCode)
        {
            // 如果SIPPCode相同，则表明为类似车型，归为同一个车组集合（美国车组一般有四个套餐：基础套餐、全险套餐、超级全险套餐、一价全包）
            // 林飞 2016-07-03 增加是否为自动挡的判断，因为德国有相同SIPPCode的两个车组，一个是自动挡，一个是手动挡。
            var carGroupsDto = this.CarGroupsList.FirstOrDefault(
                c => c.SIPPCode == carGroup.SIPPCode && c.IsAutomatic == carGroup.Feature?.IsAutomatic);
            if (carGroupsDto == null)
            {
                // New一个空的Dto对象，并添加到 CarGroupsList 集合中
                carGroupsDto = new CarGroupsDto();
                this.CarGroupsList.Add(carGroupsDto);
            }

            // 处理德国自动挡车组
            // 林飞 2017-02-16 因为carGroup.Feature.IsAutomatic变成了可空属性，所以会出现Null的情况，故采用 GetIsAutomatic() 方法来处理。不会出现null的情况了。
            if (rateCode.CountryCode == "DE" && ("^XM^JX^22^0H^").IndexOf("^" + rateCode.Code + "^") >= 0)
            {
                carGroupsDto.IsAutomatic = true;
                carGroupsDto.IsRecommend = true;
            }

            // 构建 CarGroupsDto 对象，并追加到车组列表（CarGroups）的车组信息
            BuildCarGroupsDto(carGroupsDto, carGroup, rateCode);
        }

        private void BuildCarGroupsDto(CarGroupsDto dto, CarGroup carGroup, RateCode rateCode)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(dto.SIPPCode))
                {
                    dto.ModelName = carGroup.ModelName;
                    dto.ModelCode = carGroup.ModelCode;
                    dto.SIPPCode = carGroup.SIPPCode;
                    dto.IsAutomatic = carGroup.Feature?.IsAutomatic;
                    dto.PictureURL = carGroup.PictureURL;
                    dto.IsRecommend = carGroup.IsRecommend;
                    dto.Seats = carGroup.Feature?.Seats;
                    dto.Doors = carGroup.Feature?.Doors;
                    dto.Suitcases = carGroup.Feature?.GetCNSuitcases();
                    dto.HasAirConditioning = carGroup.Feature?.HasAirConditioning;
                }

                // 增加车组信息到CarGroupDtos集合
                dto.CarGroups.Add(new CarGroupItemDto
                {
                    RateName = rateCode.Name,
                    RateCode = carGroup.RateCode,
                    SIPPCode = carGroup.SIPPCode,
                    Price = carGroup.Price,
                    CurrencyCode = carGroup.CurrencyCode,
                    PriceInclude = carGroup.PriceInclue?.SimpleContents,
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 构造函数，初始化默认值
        /// </summary>
        public CarGroupsListOutput()
        {
            CarGroupsList = new List<CarGroupsDto>();
        }
    }
}
